/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
package com.mx.saco.service.impl;

import com.mx.saco.bean.PaginaXhtmlBean;
import com.mx.saco.bean.PaginaXhtmlPadreBean;
import com.mx.saco.dao.MenuUsuarioDAO;
import com.mx.saco.entity.PaginaXhtmlPadre;
import com.mx.saco.entity.PaginaXhtml;
import com.mx.saco.service.MenuUsuarioService;
import java.util.ArrayList;
import java.util.Collection;
import java.util.LinkedHashMap;
import java.util.LinkedList;
import java.util.List;
import java.util.Map;
import javax.ejb.EJB;
import javax.ejb.Stateless;
import org.dozer.DozerBeanMapperSingletonWrapper;

/**
 *
 * @author LY005213
 */
@Stateless
public class MenuUsuarioServiceImpl implements MenuUsuarioService {

    @EJB
    MenuUsuarioDAO menuUsuarioDAO;

    @Override
    public Map<PaginaXhtmlPadreBean, List<PaginaXhtmlBean>> consultaPaginasAccesiblesPorIdUsuario(Long idUsuario) {
        Map<PaginaXhtmlPadreBean, List<PaginaXhtmlBean>> listaPaginas = new LinkedHashMap<PaginaXhtmlPadreBean, List<PaginaXhtmlBean>>();
        
        List<PaginaXhtmlBean> listBean= new ArrayList<PaginaXhtmlBean>();
        List<PaginaXhtmlPadreBean> listPadreBean= new ArrayList<PaginaXhtmlPadreBean>();
        Boolean flag;
        
        List<PaginaXhtml> list= menuUsuarioDAO.submenusAsignados(idUsuario);
        if(list!=null && list.size()>0){     
        	System.out.println("submenus "+list.size());
        	for(PaginaXhtml pagina:list){
        		PaginaXhtmlBean aux=DozerBeanMapperSingletonWrapper.getInstance().map(pagina, PaginaXhtmlBean.class);
        		listBean.add(aux);
        	}
        	List<PaginaXhtmlPadre> listPadre= menuUsuarioDAO.geMenus();
        	if(listPadre!=null && listPadre.size()>0){
        		System.out.println("menu padre "+listPadre.size());
        		for(PaginaXhtmlPadre paginaPadre:listPadre){
            		PaginaXhtmlPadreBean aux=DozerBeanMapperSingletonWrapper.getInstance().map(paginaPadre, PaginaXhtmlPadreBean.class);
            		listPadreBean.add(aux);
            	}
        	}
        	
        	for(PaginaXhtmlPadreBean padreBean:listPadreBean){
        		flag=Boolean.FALSE;
        		padreBean.setPaginaXhtmlList(new ArrayList<PaginaXhtmlBean>());
        		for(PaginaXhtmlBean pagina:listBean){
        			if(padreBean.getIdPaginaPadre()==pagina.getPaginaPadre()){
        				flag=Boolean.TRUE;
        				padreBean.getPaginaXhtmlList().add(pagina);
        			}
        		}
        		if(flag)
        			listaPaginas.put(padreBean, padreBean.getPaginaXhtmlList());
        		
        		
        	}
        	
        }
        
   
        /*List<MenuUsuario> listaMenu = menuUsuarioDAO.consultaPaginasAccesiblesPorIdUsuario(idUsuario);
        Collection subMenus;

        if (listaMenu != null) {
            subMenus = new LinkedList<PaginaXhtmlPadreBean>();
            for (MenuUsuario menu : listaMenu) {
                if (!subMenus.contains(menu.getPaginaXhtml().getPaginaXhtmlPadre())) {
                    subMenus.add(menu.getPaginaXhtml().getPaginaXhtmlPadre());
                }
            }
            List<PaginaXhtmlBean> subListaPaginas;
            PaginaXhtmlPadreBean paginaXhtmlPadreBean;
            for (Object subMenu : subMenus) {
                subListaPaginas = new LinkedList<PaginaXhtmlBean>();
                PaginaXhtmlBean paginaXhtmlBean;
                paginaXhtmlPadreBean = DozerBeanMapperSingletonWrapper.getInstance()
                        .map((PaginaXhtmlPadre) subMenu, PaginaXhtmlPadreBean.class);
                for (MenuUsuario menu : listaMenu) {
                    if (menu.getPaginaXhtml().getPaginaXhtmlPadre().equals(subMenu)) {
                        paginaXhtmlBean = DozerBeanMapperSingletonWrapper
                                .getInstance().map(menu.getPaginaXhtml(), PaginaXhtmlBean.class);
                        subListaPaginas.add(paginaXhtmlBean);
                    }
                }
                listaPaginas.put(paginaXhtmlPadreBean, subListaPaginas);
            }
        }*/
        return listaPaginas;
    }

    @Override
    public boolean guardaPermisoMenuUsuario(Long idUsuario, Long idPagina) {
       // return menuUsuarioDAO.guardaMenuUsuario(idUsuario, idPagina);
    	return Boolean.TRUE;
    }

    @Override
    public boolean eliminarPermisosUsuario(Long idUsuario) {
        //return menuUsuarioDAO.eliminarPermisosUsuario(idUsuario);
    	return Boolean.TRUE;
    }

    @Override
    public List<PaginaXhtmlPadreBean> consultaMenusPadre() {
        List<PaginaXhtmlPadreBean> menuBeanList = null;
      /*  List<PaginaXhtmlPadre> listaMenu = menuUsuarioDAO.geMenus();
        if (listaMenu != null) {
            menuBeanList= new ArrayList<PaginaXhtmlPadreBean>();
            for (PaginaXhtmlPadre menu : listaMenu) {
               PaginaXhtmlPadreBean menuItem= DozerBeanMapperSingletonWrapper.getInstance().map(menu, PaginaXhtmlPadreBean.class);               
               if(menu.getPaginasXhtml()!=null){
                   List<PaginaXhtmlBean> listaSubMenu= new ArrayList<PaginaXhtmlBean>();
                   for(PaginaXhtml submenuItem:menu.getPaginasXhtml()){
                       PaginaXhtmlBean item=DozerBeanMapperSingletonWrapper.getInstance().
                               map(submenuItem, PaginaXhtmlBean.class);
                       listaSubMenu.add(item);
                   }
                  menuItem.setSubMenus(listaSubMenu);                 
               }
               menuBeanList.add(menuItem);
            }
        }*/
        return menuBeanList;

    }

    @Override
    public List<PaginaXhtmlBean> consultaSubMenuUsuario(long idMenu,long idUsuario) {
    
        List<PaginaXhtmlBean> listBean=null;/*
        List<PaginaXhtml> list=menuUsuarioDAO.submenusAsignados(idMenu, idUsuario);
        if(list!=null){
            listBean= new ArrayList<PaginaXhtmlBean>();
            for(PaginaXhtml p:list){
                PaginaXhtmlBean pb=DozerBeanMapperSingletonWrapper.getInstance().
                        map(p, PaginaXhtmlBean.class);
               listBean.add(pb);
            }
        }*/
            return listBean;
    }

}
